草庐IT

C++ make_shared 不可用

全部标签

c++ - 返回 char1 + char2?不可能吗?

我正在尝试从函数返回一个字符串。这基本上是将一些字符加在一起并返回字符串表示形式。stringtoString(){charc1,c2,c3;//somecodeherereturnc1+c2;//Error:invalidconversionfrom`char'to`constchar*'}可以返回bool值,如returnc1=='x'。不能返回字符串值吗?我知道可以这样:stringresult;result.append(c1,c2);returnresult;我是C++的新手,所以我认为一定有更优雅的解决方案。 最佳答案

c++ - 为什么我不应该总是使用 shared_ptr 和 unique_ptr 而是使用普通指针?

我有C#和obj-c的背景,所以RC/GC是我(仍然)珍视的东西。当我开始更深入地学习C++时,我一直想知道为什么在它们如此不受管理时我会使用普通指针而不是其他替代解决方案?shared_ptr提供了一种很好的方式来存储引用并且不会在不删除它们的情况下丢失它们。我可以看到普通指针的实用方法,但它们似乎只是不好的做法。有人可以解释这些替代方案吗? 最佳答案 当然,如果他们拥有指针,我们鼓励您使用共享和唯一的ptr。但是,如果您只需要一个观察者,那么原始指针就可以了(指针不对其指向的任何内容负责)。std::uniqe_ptr基本上没有

c++ - 不可恢复的 block 作用域错误,C++ 仿函数数组

我试图在编译时创建仿函数数组,如下所示:(完整文件):#includeusingnamespacestd;functioncolorFunctions[]={[](floattElevation,floatpAzimuth)->float{return2.0f;},};intmain(){}这很好用。但是,一旦您尝试在仿函数block内创建一个局部变量,就像这样:functioncolorFunctions[]={[](floattElevation,floatpAzimuth)->float{floatv=2.0f;returnv;},};您收到错误1​​errorC1506:unr

c++ - 在 C++ 静态 boost::shared_ptr 中保存 python 生成的值

在使用Boost.Python和C++时,有时我们会创建使用类本身和boost::shared_ptr绑定(bind)的类。版本。出于多种原因,这非常方便,可以在很多地方使用。但是,当boost::python时,该机制似乎无法可靠地工作。返回boost::shared_ptr为在Python中生成并记录在C++静态变量中的值。通常,我希望返回boost::shared_ptr持有一个特殊的删除器来处理这个问题,但事实并非如此。似乎发生的是返回的boost::shared_ptr只是包装一个指向在Python中产生的值的指针,没有任何关于删除的特殊考虑。这会导致来自双重删除的一致崩溃(

c++ - 为什么不允许使用 `make_unique<T[N]>`?

假设命名空间std贯穿始终。C++14委员会草案N3690定义了std::make_unique因此:[n3690:20.9.1.4]:unique_ptrcreation   [unique.ptr.create]templateunique_ptrmake_unique(Args&&...args);1Remarks:ThisfunctionshallnotparticipateinoverloadresolutionunlessTisnotanarray.2Returns:unique_ptr(newT(std::forward(args)...)).templateunique

c++ - 使用不可导出的私钥和 CryptoAPI 进行解密

我在Windowskeystore中创建了RSAkey对。我成功加密数据(对称key):HCERTSTOREhstore=::CertOpenSystemStore(NULL,L"TestStore");PCCERT_CONTEXTpctxt=::CertFindCertificateInStore(hstore,X509_ASN_ENCODING,NULL,CERT_FIND_SUBJECT_STR,L"MyTestKeys",NULL);HCRYPTPROVhprovider=NULL;if(!::CryptAcquireContext(&hprovider,NULL,MS_ENH

c++ - 为什么此生成文件适用于 make 3.81 而不是 3.82?

我有一个非常简单的makefile来构建一个静态库,多年来它在GNUmake版本3.81上运行良好,但在版本3.82上运行失败。我已经阅读了有关向后兼容性的问题,但这些问题似乎并不适用。我还检查了这里的几个帖子,例如MakefileSyntax:Staticlibrarylib$(library).a($objects)和Makefile-tocreateastaticlibrary,但找不到解决方案。这是我的生成文件:FILES=file1.ccfile2.ccfile3.ccOBJ_FILES=$(FILES:.cc=.o)libname.a:libname.a($(OBJ_FIL

c++ - 由于引用计数器原子递增/递减,shared_ptrs 是否会遇到缓存未命中?

(这可能是原子递增/递减的一般问题,但我在shared_ptrs领域遇到过这种情况)当原子引用计数器递增和递减时,shared_ptr是否遇到两次缓存行未命中/访问?我确实找到了这个:atomicoperationcost但它似乎并没有过于确定......更新:如果我运行一个循环数百万次,递增一个原子变量,我得到的L1缓存未命中率为0.2。如果我对非原子int做同样的事情,我会得到0L1缓存未命中率......测试将暗示L1缓存行正在被逐出。 最佳答案 shared_ptr必须在某处存储引用计数变量。它可能是从堆中分配的,并且sha

c++ - 是否允许不可访问的类型作为模板参数?

假设我有一个带有一些重要元数据的模板类:templatestructMetadata{staticconstintImportantInformation;};我有一个使用私有(private)内部类做一些工作的类:classWorkDoer{classPrivate;public:WorkDoer();};私有(private)内部类继承自Metadata:classWorkDoer::Private:publicMetadata{};ImportantInformation常量不是由编译器自动定义的,因此它需要位于顶级作用域的某个编译单元中,否则链接将失败:templatecons

c++ - 访问冲突读取位置-未终止的字符串(不可读的内存)

我正在使用log4cplus库,但无法使日志记录正常工作。我使用这段代码:PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log.properties"));Loggerg_logger=Logger::getInstance(LOG4CPLUS_TEXT("mylogger"));LOG4CPLUS_WARN(g_logger,LOG4CPLUS_TEXT("testtesttest"));它在LOG4CPLUS_WARN处中断并出现错误:访问违规读取位置这是我的调用栈:msvcp110d.dll!std::basic_stream